From f85425751246890b7a53e05586e0e6403f55e0b1 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sun, 30 Jan 2022 06:42:50 -0700 Subject: [PATCH] convert f90g_track to Format class. (#844) --- CMakeLists.txt | 1 + GPSBabel.pro | 1 + f90g_track.cc | 65 ++++++++++++------------------------- f90g_track.h | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++ vecs.h | 4 +-- 5 files changed, 113 insertions(+), 46 deletions(-) create mode 100644 f90g_track.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fd022483..38ffddd79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,6 +222,7 @@ set(HEADERS energympro.h exif.h explorist_ini.h + f90g_track.h filter.h filter_vecs.h format.h diff --git a/GPSBabel.pro b/GPSBabel.pro index dca2de4a4..bf0c2c78d 100644 --- a/GPSBabel.pro +++ b/GPSBabel.pro @@ -209,6 +209,7 @@ HEADERS = \ energympro.h \ exif.h \ explorist_ini.h \ + f90g_track.h \ filter.h \ filter_vecs.h \ format.h \ diff --git a/f90g_track.cc b/f90g_track.cc index f9eee80e6..611932ea4 100644 --- a/f90g_track.cc +++ b/f90g_track.cc @@ -26,32 +26,32 @@ */ -#include "defs.h" -#include "gbfile.h" -#include -#include +#include "f90g_track.h" -#define MYNAME "f90g_track" -#define TTRECORDSIZE 249 -#define HEADERRECORDSIZE 30 -#define FLIPEDBITS 0xaa +#include // for QDate +#include // for QDateTime +#include // for QFileInfo +#include // for QTime +#include // for UTC +#include // for sscanf, snprintf, SEEK_SET +#include // for memcmp +#include "defs.h" // for fatal, Waypoint, track_add_head, track_add_wpt, route_head +#include "gbfile.h" // for gbfread, gbfclose, gbfopen, gbfseek -static gbfile* fin = nullptr; -static route_head* track = nullptr; - -static -QVector f90g_track_args = { -}; +#define MYNAME "f90g_track" +#define TTRECORDSIZE 249 +#define HEADERRECORDSIZE 30 +#define FLIPEDBITS 0xaa +#define VALIDHEADER "MEDIA 1." /******************************************************************************* * %%% global callbacks called by gpsbabel main process %%% * *******************************************************************************/ -#define VALIDHEADER "MEDIA 1." -static void -f90g_track_rd_init(const QString& fname) +void +F90gTrackFormat::rd_init(const QString& fname) { char header[HEADERRECORDSIZE]; @@ -74,18 +74,14 @@ f90g_track_rd_init(const QString& fname) } } -static void -f90g_track_rd_deinit() +void +F90gTrackFormat::rd_deinit() { gbfclose(fin); } -// needed conversion factors -static const double MIN_PER_DEGREE = 600000.0f; -static const float SPEED_CONVERSION = (10.0f)/(36.0f); // convert KPH to meters per second - -static void -f90g_track_read() +void +F90gTrackFormat::read() { char northSouth, eastWest, velocityMark, ttRec[TTRECORDSIZE], tempBuf[20]; int year, mon, mday, hour, min, sec, latitudeDeg, latitudeMin, longitudeDeg, longitudeMin, velocity; @@ -139,22 +135,3 @@ f90g_track_read() } } } - -// capabilities below means: we can only read trace file. - -ff_vecs_t f90g_track_vecs = { - ff_type_file, - { ff_cap_none, (ff_cap)(ff_cap_read), ff_cap_none }, - f90g_track_rd_init, - nullptr, - f90g_track_rd_deinit, - nullptr, - f90g_track_read, - nullptr, - nullptr, - &f90g_track_args, - CET_CHARSET_UTF8, 0 /* ascii is the expected character set */ - /* not fixed, can be changed through command line parameter */ - , NULL_POS_OPS, - nullptr -}; diff --git a/f90g_track.h b/f90g_track.h new file mode 100644 index 000000000..5e70976fa --- /dev/null +++ b/f90g_track.h @@ -0,0 +1,88 @@ +/* + Map file reader for F90G Automobile DVR. + + Copyright (C) 2014 Jim Keeler, James.L.Keeler@gmail.com + Copyright (C) 2001-2013 Robert Lipe, robertlipe+source@gpsbabel.org + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Read the map file contents picking out the defined record types. + + The map file contains a constant 30 byte header record followed by a variable number of + TT records. The TT records start with the two characters "TT" and are 251 bytes long. + The TT records contain values for time, position and velocity. + + */ +#ifndef F90G_TRACK_H_INCLUDED_ +#define F90G_TRACK_H_INCLUDED_ + +#include // for QString +#include // for QVector + +#include "defs.h" // for ff_cap, arglist_t, ff_cap_none, CET_CHARSET_UTF8, ff_cap_read, ff_type, ff_type_file, route_head +#include "format.h" // for Format +#include "gbfile.h" // for gbfile + + +class F90gTrackFormat : public Format +{ +public: + QVector* get_args() override + { + return &f90g_track_args; + } + + ff_type get_type() const override + { + return ff_type_file; + } + + QVector get_cap() const override + { + // waypoints, tracks, routes + return { ff_cap_none, (ff_cap)(ff_cap_read), ff_cap_none }; + } + + QString get_encode() const override + { + return CET_CHARSET_UTF8; + } + + int get_fixed_encode() const override + { + return 0; + } + + void rd_init(const QString& fname) override; + void read() override; + void rd_deinit() override; + +private: + /* Constants */ + + // needed conversion factors + static constexpr double MIN_PER_DEGREE = 600000.0; + static constexpr float SPEED_CONVERSION = (10.0f)/(36.0f); // convert KPH to meters per second + + /* Data Members */ + + gbfile* fin = nullptr; + route_head* track = nullptr; + + QVector f90g_track_args = { + }; + +}; +#endif // F90G_TRACK_H_INCLUDED_ diff --git a/vecs.h b/vecs.h index 6b00f1275..e610ce505 100644 --- a/vecs.h +++ b/vecs.h @@ -30,6 +30,7 @@ #include "defs.h" #include "dg-100.h" #include "energympro.h" +#include "f90g_track.h" #include "exif.h" #include "format.h" #include "garmin_fit.h" @@ -126,7 +127,6 @@ extern ff_vecs_t mmo_vecs; extern ff_vecs_t v900_vecs; extern ff_vecs_t enigma_vecs; extern ff_vecs_t format_garmin_xt_vecs; -extern ff_vecs_t f90g_track_vecs; #endif // MAXIMAL_ENABLED class Vecs @@ -320,7 +320,7 @@ private: LegacyFormat format_garmin_xt_fmt {format_garmin_xt_vecs}; GarminFitFormat format_fit_fmt; MapbarTrackFormat mapbar_track_fmt; - LegacyFormat f90g_track_fmt {f90g_track_vecs}; + F90gTrackFormat f90g_track_fmt; MapfactorFormat mapfactor_fmt; EnergymproFormat energympro_fmt; MyNavFormat mynav_fmt; -- 2.30.2